'use strict';
import { Controller } from 'egg';
// import { type } from 'os';

export default class UserController extends Controller {
  public async register() {
    const { ctx } = this;
    // ctx.body = await ctx.service.test.sayHi('egg');
    // ctx.body = await ctx.model.User.findAll();ctx.request.body
    console.log(ctx.request.body);

    try {
      let res = await ctx.service.user.createUser(ctx.request.body);
      ctx.success(res);
    } catch (e) {
      console.log(e);
      
      ctx.error(402, ctx.helper.errorCode[402]);
    }

    // const App = {
    //   name: 'sds',
    //   age: 12,

    // }

    // type APP = typeof App;

    // const g: APP = {};
  }
  public async login() {
    const { ctx } = this;
    try {
      let res = await ctx.service.user.getUser(ctx.request.body.username, ctx.request.body.password);
      console.log(res);
      // this.ctx.cookies.set('name', 'lnj', {
      //   path: '/',
      //   maxAge: 24 * 60 * 60 * 1000,
      //   httpOnly: true,
      //   /*
      //   在EggJS中, 为了安全着想, 阿里的安全专家建议我们在设置Cookie的时候, 给保存的数据生成一个签名
      //   将来获取数据的时候, 再利用获取到的数据生成一个签名, 和当初保存的时候的签名进行对比
      //   如果一致, 表示保存在客户端的数据没有被篡改, 如果不一致表示保存在客户端的数据已经被篡改
      //   * */
      //   signed: true, // 根据config/config.default.js中的keys来生成签名
      //   encrypt: true // 让EggJS帮我们加密之后再保存
      // });
      // ctx.session.user = res;


      const token = ctx.app.jwt.sign({
        ...ctx.request.body,
      }, this.app.config.jwt.secret, {
        expiresIn: '60m', // 时间根据自己定，具体可参考jsonwebtoken插件官方说明
      });
      console.log(token);
      
      let maxAge = 24 * 60 * 60 * 1000;
      // await app.redis.set(key, value, 'PX', maxAge);
      // await this.app.redis.set(res.nick_name, 'value', 'PX', maxAge);
      await this.app.sessionStore.set(res.nick_name,'value',maxAge)
      // let a = await this.app.sessionStore.get(res.nick_name)
      const res1 = await this.app.redis.get(res.id);
      console.log(res1);
      // console.log(a);
      ctx.success(res, '登录成功');
    } catch (e) {
      console.log(e);
      
      ctx.error(400, ctx.helper.errorCode[422]);
    }
  }

  public async getPersonalInfo() {
    const { ctx } = this;
    try {
      console.log(ctx.query);
      let res = await ctx.service.user.getPersonalInfo(ctx.query);
      ctx.success(res, '查询成功');
    } catch (e) {
      console.log(e);
      ctx.error(423, ctx.helper.errorCode[423]);
    }
  }

  public async forgetPassword() {
    const { ctx } = this;
    const { username, password, scret_protection } = ctx.request.body
    try {
      let res = await ctx.service.user.changePassword(username, password, scret_protection);
      ctx.success(res, '修改成功');
    } catch (e) {
      console.log(e);
      ctx.error(423, ctx.helper.errorCode[423]);
    }
  }

  public async changePassword() {
    const { ctx } = this;
    const { user_id, oldPassword, newPassword } = ctx.request.body
    try {
      let res = await ctx.service.user.updatePassword(user_id, newPassword, oldPassword);
      console.log(res);
      ctx.success(res, '修改成功');
    } catch (e) {
      ctx.error(423, ctx.helper.errorCode[423]);
    }
  }

  public async updatePhoto() {
    const { ctx } = this;
    try {
      let res = await ctx.service.user.changePhoto();
      ctx.success(res, '操作成功');
    } catch (e) {
      ctx.error(500, ctx.helper.errorCode[500]);
    }
  }

  public async changeTel() {
    const { ctx } = this;
    const { user_id, value } = ctx.request.body
    try {
      let res = await ctx.service.user.changeTelV(user_id, value);
      ctx.success(res, '操作成功');
    } catch (e) {
      ctx.error(500, ctx.helper.errorCode[500]);
    }
  }

  public async changeName() {
    const { ctx } = this;
    const { user_id, value } = ctx.request.body
    try {
      let res = await ctx.service.user.changeNameV(user_id, value);
      ctx.success(res, '操作成功');
    } catch (e) {
      ctx.error(500, ctx.helper.errorCode[500]);
    }
  }

  public async changeGender() {
    const { ctx } = this;
    const { user_id, value } = ctx.request.body
    try {
      let res = await ctx.service.user.changeGenderV(user_id, value);
      ctx.success(res, '操作成功');
    } catch (e) {
      ctx.error(500, ctx.helper.errorCode[500]);
    }
  }

  public async changeSign() {
    const { ctx } = this;
    const { user_id, value } = ctx.request.body
    try {
      let res = await ctx.service.user.changeSignV(user_id, value);
      ctx.success(res, '操作成功');
    } catch (e) {
      ctx.error(500, ctx.helper.errorCode[500]);
    }
  }

  public async changeLocation() {
    const { ctx } = this;
    const { user_id, value } = ctx.request.body
    try {
      let res = await ctx.service.user.changeLocationV(user_id, value);
      ctx.success(res, '操作成功');
    } catch (e) {
      ctx.error(500, ctx.helper.errorCode[500]);
    }
  }

}
